Skip to content

Conversation

@artagnon
Copy link
Contributor

@artagnon artagnon commented May 17, 2025

No description provided.

@llvmbot llvmbot added the llvm:analysis Includes value tracking, cost tables and constant folding label May 17, 2025
@llvmbot
Copy link
Member

llvmbot commented May 17, 2025

@llvm/pr-subscribers-llvm-analysis

Author: Ramkumar Ramachandra (artagnon)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/140384.diff

1 Files Affected:

  • (modified) llvm/lib/Analysis/LoopAccessAnalysis.cpp (+7-14)
diff --git a/llvm/lib/Analysis/LoopAccessAnalysis.cpp b/llvm/lib/Analysis/LoopAccessAnalysis.cpp
index ab407e945bc53..58083cb06f5f6 100644
--- a/llvm/lib/Analysis/LoopAccessAnalysis.cpp
+++ b/llvm/lib/Analysis/LoopAccessAnalysis.cpp
@@ -999,23 +999,16 @@ static void findForkedSCEVs(
       break;
     }
 
-    // Find the pointer type we need to extend to.
-    Type *IntPtrTy = SE->getEffectiveSCEVType(
-        SE->getSCEV(GEP->getPointerOperand())->getType());
-
-    // Find the size of the type being pointed to. We only have a single
-    // index term (guarded above) so we don't need to index into arrays or
-    // structures, just get the size of the scalar value.
-    const SCEV *Size = SE->getSizeOfExpr(IntPtrTy, SourceTy);
-
     // Scale up the offsets by the size of the type, then add to the bases.
+    const SCEV *Offset0 = get<0>(OffsetScevs[0]);
+    const SCEV *Offset1 = get<0>(OffsetScevs[1]);
+    const SCEV *Scaled0 = SE->getMulExpr(
+        SE->getSizeOfExpr(Offset0->getType(), SourceTy), Offset0);
     const SCEV *Scaled1 = SE->getMulExpr(
-        Size, SE->getTruncateOrSignExtend(get<0>(OffsetScevs[0]), IntPtrTy));
-    const SCEV *Scaled2 = SE->getMulExpr(
-        Size, SE->getTruncateOrSignExtend(get<0>(OffsetScevs[1]), IntPtrTy));
-    ScevList.emplace_back(SE->getAddExpr(get<0>(BaseScevs[0]), Scaled1),
+        SE->getSizeOfExpr(Offset1->getType(), SourceTy), Offset1);
+    ScevList.emplace_back(SE->getAddExpr(get<0>(BaseScevs[0]), Scaled0),
                           NeedsFreeze);
-    ScevList.emplace_back(SE->getAddExpr(get<0>(BaseScevs[1]), Scaled2),
+    ScevList.emplace_back(SE->getAddExpr(get<0>(BaseScevs[1]), Scaled1),
                           NeedsFreeze);
     break;
   }

@artagnon artagnon changed the title [LAA] Simplify GEP SCEV in findForkedSCEVs (NFC) [LAA] Improve code in findForkedSCEVs (NFC) May 17, 2025
@david-arm david-arm requested a review from huntergr-arm May 19, 2025 09:09
@artagnon artagnon force-pushed the laa-forkedscev-gep-nfc branch from 0fc49fc to 74b711b Compare May 19, 2025 18:06
@artagnon
Copy link
Contributor Author

Gentle ping.

@artagnon artagnon force-pushed the laa-forkedscev-gep-nfc branch from 74b711b to 4a093b1 Compare June 2, 2025 14:27
Copy link
Contributor

@fhahn fhahn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks

@artagnon artagnon merged commit ba57ff6 into llvm:main Jun 3, 2025
11 checks passed
@artagnon artagnon deleted the laa-forkedscev-gep-nfc branch June 3, 2025 10:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

llvm:analysis Includes value tracking, cost tables and constant folding

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants